package com.ccx.demo.Handler;

import com.ccx.demo.service.Impl.MyDetailsServiceImpl;
import com.ccx.demo.utils.JwtTokenUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@Component
public class LoginService {

    @Autowired
    private JwtTokenUtils jwtTokenUtils;

    @Autowired
    private MyDetailsServiceImpl adminService;

    @Autowired
    PasswordEncoder passwordEncoder;


    public Map login(String username, String password) {//拿到Controller层传入的账号密码
        Map map = null;
        //将账号传入到连接数据库获取账号密码权限业务逻辑类AdminServiceImpl进行校验
        //如果存在与用户名相对于的用户信息则返回一个user类,回到LoginService类进行密码的校验
        //如果不存在与用户名相对于的用户信息则抛出一个异常,进行MyError类的认证失败处理返回给前端该用户不存在
        UserDetails user = adminService.loadUserByUsername(username);
        if (!passwordEncoder.matches(/*原始密码*/password,/*加密过的密码*/user.getPassword())) {
            //进行密码的校验,校验失败返回前端密码错误
            map = new HashMap();
            map.put("code", 303);
            map.put("msg", "密码错误");
            return map;
        } else {
            //密码正确
            map = jwtTokenUtils.getToken(username);//生成携带用户名的Token
            map.put("code", 200);
            map.put("msg", "登录成功");
            map.put("username", username);//返回给前端用户名方便前端渲染
            return map;//返回给前端一个含有Token的map集合
        }
    }
}